package com.xlkj.ms.tools.core.response;

import com.xlkj.ms.tools.core.commons.DefaultRetCode;

import java.io.Serializable;

/**
 * <pre>
 * {@code
 * {
 *     "code":"***",
 *     "msg":"****"
 * }
 * }
 * </pre>
 * @author zhuqifeng
 * @date 2021/11/10 13:57
 * @package com.xlkj.ms.tools.core.response
 */
public abstract class AbstractResponse implements ResponseWrapper, Serializable {

    private static final long serialVersionUID = -7234925247253108048L;

    protected String code;

    protected String msg;

    public AbstractResponse() {}

    public AbstractResponse(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 包装处理成功的响应（默认响应成功为200-成功）
     */
    @Override
    public void wrapperSuccess(){
        this.code = DefaultRetCode.SUCCESS.getCode();
        this.msg = DefaultRetCode.SUCCESS.getMsg();
    }

    /**
     * 包装系统异常（默认响应系统异常为999-系统异常）
     */
    @Override
    public void wrapperSystemError(){
        this.code = DefaultRetCode.SYS_ERROR.getCode();
        this.msg = DefaultRetCode.SYS_ERROR.getMsg();
    }

    /**
     * 包装参数错误的响应（默认参数错误为998-参数错误：%wd，其中"%wd"为illegalArguments）
     * @param illegalArguments 具体的参数错误信息（或字段名）
     */
    @Override
    public void wrapperIllegalArgument(String... illegalArguments){
        this.code = DefaultRetCode.ILLEGAL_ARGUMENT.getCode();
        this.msg = DefaultRetCode.changeRetCode(DefaultRetCode.ILLEGAL_ARGUMENT, illegalArguments);
    }

    /**
     * 包装业务异常处理
     * @param code
     * @param msg
     * @deprecated 这个方法在v1.1.9.4版本后废弃（这个可以放到业务异常类中进行处理）
     */
    @Deprecated
    public void wrapperBizFailed(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}